package lu.med.praxiswahl.wahlumed.client.formdesigner;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;

import javax.swing.JOptionPane;

/**
 * 
 * @author Lars Holger Roth
 */
public class FormDesignerModel
{
    private ArrayList<FormDesignerObject> data = new ArrayList<FormDesignerObject>();
    private ArrayList<FormDesignerModelListener> listener = new ArrayList<FormDesignerModelListener>();

    public void addListener(FormDesignerModelListener l)
    {
	listener.add(l);
    }

    public void clear()
    {
	data.clear();
	this.fireModelChanged();
    }

    public void createObjectPosition(String desc, int posX, int posY)
    {
	// Erzeugt ein neues Positionsobjekt, jenes
	// besteht immer aus einem X und einem Y Tag mit Koordinate
	data.add(new FormDesignerObject(desc + "_X", posX));
	data.add(new FormDesignerObject(desc + "_Y", posY));
	this.fireModelChanged();
    }

    public void deleteObject(int index)
    {
	if (index < data.size())
	{
	    data.remove(index);
	}
	this.fireModelChanged();
    }

    public void exportToPrintConfigurationFile(String fileName)
    {
	// Schreibt die Daten so in eine Datei, dass sie von einem
	// PrintConfigurationObject Ausgelesen werden kann
	// Format
	// POS//DESCRIPTION
	File file = new File(fileName);
	try
	{
	    PrintWriter stream = new PrintWriter(new FileWriter(file));
	    for (int i = 0; i < data.size(); i++)
	    {
		stream.println(data.get(i).getPos() + "//"
			+ data.get(i).getDescription());
	    }
	    stream.close();
	}
	catch (IOException e)
	{
	    JOptionPane.showMessageDialog(null, "Fehler beim Exportieren");
	}
    }

    public void fireModelChanged()
    {
	for (int i = 0; i < listener.size(); i++)
	{
	    listener.get(i).modelChanged();
	}
    }

    public ArrayList<FormDesignerObject> getObjects()
    {
	return data;
    }

    public void removeListener(FormDesignerModelListener l)
    {
	listener.remove(l);
    }
}
